package interview.huawei.tjt.training.huaweijishitiku;

import java.util.*;

// 数据分类处理
public class HJ25 {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        while ( sc.hasNext() ) {

            // 序列I
            int i = sc.nextInt();
            String arrI[] = new String[i];
            for ( int j = 0; j < i; j ++ ) {
                arrI[j] = String.valueOf(sc.nextInt());
            }

            // 序列R
            int r = sc.nextInt();
            // 不能直接用如下的数组来存储，因为题目中要求R中重复的元素在输出结果中只输出一次，因此要确保数字的唯一性，可以用TreeSet来存储
//            int arrR[] = new int[r];
//            for ( int j = 0; j < r; j ++ ) {
//                arrR[j] = sc.nextInt();
//            }
//            // 对数组R进行升序排序
//            Arrays.sort(arrR);

            //用 TreeSet 来存储，确保存入数据的唯一性和遍历输出时的有序性（TreeSet类是实现Set接口的3个使用的类之一，
            //是 Set 集合的实现类，因此它也具有元素唯一性和无序性，它的底层数据结构是 TreeMap 树结构，
            // 它确保元素的唯一性是通过 Compareable 接口的 compareto 方法，另外，它既是无序的，又是有序的。
            // 无序指的是存储元素顺序和输出顺序不同，有序指的是遍历集合时，输出的所有元素是有序的。
            Set<Integer> setR = new TreeSet<>();
            for ( int j = 0; j < r; j ++ ) {
                setR.add(sc.nextInt());
            }

            // 定义输出时的总的数字的个数
            int count = 0;

            StringBuffer stringBuffer = new StringBuffer();

            // 遍历数组R
            for (int j : setR) {
                // 用来存放包含R中元素的来自于I中的元素，map的size即为含有R元素的I中元素的个数
                Map<Integer,String> map = new TreeMap<>();
                for ( int m = 0; m < i; m ++ ) {
                    if ( arrI[m].contains(String.valueOf(j)) ) {
                        map.put(m,arrI[m]); // 将含有R中元素的在I中元素的位置和值存入map中
                    }
                }
                // 当Map非空时存入stringBuffer中
                if ( !map.isEmpty() ) {
                    if ( count > 0 ) {
                        stringBuffer.append(" ");
                    }
                    stringBuffer.append(j).append(" ").append(map.size());
                    count += 2; // 多了两个数
                    // 遍历map
                    for ( Map.Entry<Integer,String> map1 : map.entrySet() ) {
                        count += 2; // 多了两个数
                        stringBuffer.append(" ").append(map1.getKey()).append(" ").append(map1.getValue());
                    }
                }
            }

            // 当count大于0时才有输出
            if ( count > 0 ) {
                StringBuffer result = new StringBuffer();
                result.append(count).append(" ").append(stringBuffer.toString());
                System.out.println(result.toString());
            }

        }

    }

}
